// 全局函数
exports.install = function(Vue, options) {
  Vue.prototype.z_fullNum = (maxHeight, fullHeight, dValue) => {
    dValue = dValue || 0
    return maxHeight - fullHeight > dValue ? maxHeight - fullHeight : dValue
  }

  // 验证整数
  Vue.prototype.valiInt = (val) => {
    const reg = /^-?[1-9]\d*$/
    return reg.test(val) || val === 0 || val === '0'
  }

  // 一维数组去重
  Vue.prototype.unique = (val) => {
    var value = []
    for (var v in val) {
      if (value.indexOf(val[v]) === -1) {
        value.push(val[v])
      }
    }
    return value
  }

  // 处理数字前填零
  Vue.prototype.zeroize = (value, length) => {
    value = String(value)
    length = length || 2

    for (var i = 0, zeros = ''; i < (length - value.length); i++) {
      zeros += '0'
    }

    return zeros + value
  }

  // 比较时间
  Vue.prototype.cdate = (one, two, type) => {
    one = (one ? new Date(one) : new Date()).getTime()
    two = (two ? new Date(two) : new Date()).getTime()
    type = !type || ['>', '>=', '=', '<=', '<', '!='].indexOf(type) === -1 ? '>' : type
    switch (type) {
      case '>=':
        return one >= two

      case '=':
        return one === two

      case '<=':
        return one <= two

      case '<':
        return one < two

      case '!=':
        return one !== two

      default:
        return one > two
    }
  }

  // 获取时间
  Vue.prototype.fdate = (format, time) => {
    /**
     * y
     * Y 年份
     *
     */
    var date = time ? new Date(time) : new Date()
    var formatDate = format.split('').map((val) => {
      switch (val) {
        case 'Y':
          return String(date.getFullYear())

        case 'y':
          return String(date.getFullYear()).substr(2)

        case 'M':
          return ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'][date.getMonth()]

        case 'm':
          return Vue.prototype.zeroize(date.getMonth() + 1)

        case 'D':
          return ['Sun', 'Mon', 'Tue', 'Wed', 'Thr', 'Fri', 'Sat'][date.getDay()]

        case 'd':
          return Vue.prototype.zeroize(date.getDate())

        case 'H':
          return Vue.prototype.zeroize(date.getHours())

        case 'h':
          return Vue.prototype.zeroize(date.getHours() % 12 || 12)

        case 'i':
          return Vue.prototype.zeroize(date.getMinutes())

        case 's':
          return Vue.prototype.zeroize(date.getSeconds())

        case 'A':
          return date.getHours() < 12 ? 'AM' : 'PM'

        case 'a':
          return date.getHours() < 12 ? 'am' : 'pm'

        default:
          return val
      }
    })

    // 返回结果
    return formatDate.join('')
  }

  // 上传文件
  Vue.prototype.uploadImg = () => {
    return '/api/File/img'
  }

  // 处理字段名称
  Vue.prototype.fieldName = (item) => {
    const $name = 'prop'
    for (const name of [$name, 'name', 'field']) {
      if (item && Object.prototype.hasOwnProperty.call(item, name) && item[name] && item[name].trim()) {
        return name
      }
    }
    return $name
  }

  // 处理字段标题
  Vue.prototype.fieldLabel = (item) => {
    const $name = 'label'
    for (const name of [$name, 'title']) {
      if (item && Object.prototype.hasOwnProperty.call(item, name) && item[name] && item[name].trim()) {
        return name
      }
    }
    return $name
  }

  // 处理字段名称
  Vue.prototype.$prop = (item) => {
    const $name = 'prop'
    for (const name of [$name, 'name', 'field']) {
      if (item && Object.prototype.hasOwnProperty.call(item, name) && item[name] && item[name].trim()) {
        return name
      }
    }
    return $name
  }

  // 处理字段标题
  Vue.prototype.$label = (item) => {
    const $name = 'label'
    for (const name of [$name, 'title']) {
      if (item && Object.prototype.hasOwnProperty.call(item, name) && item[name] && item[name].trim()) {
        return name
      }
    }
    return $name
  }

  // 处理字段标题值
  Vue.prototype.$labelVal = (item) => {
    const label = Vue.prototype.$label(item)
    if (item && Object.prototype.hasOwnProperty.call(item, label)) {
      return item[label]
    }
    return label
  }

  // 处理字段默认数据
  Vue.prototype.handleFieldLabels = (item) => {
    if (!item || item.length > 0) {
      return item
    }

    for (const label of ['$label', '$prop']) {
      if (item && (!Object.prototype.hasOwnProperty.call(item, label) || !item[label] || !item[label].trim())) {
        item[label] = item[Vue.prototype[label](item)]
      }
    }

    return item
  }

  // 是否element框架图标
  Vue.prototype.isElementIcon = (icon) => {
    return icon.indexOf('el-icon-') !== -1
  }

  // 显示图片
  Vue.prototype.showImg = (id, size) => {
    return '/api/File/showImg/?id=' + id
  }

  // 编辑器toolbars
  Vue.prototype.ueditorToolbars = (type) => {
    return [
      [
        'source' // 源代码
        , 'undo' // 撤销
        , 'redo' // 重做
        , 'formatmatch' // 格式刷
        , 'removeformat' // 清除格式
        , 'insertcode' // 代码语言
        , 'fontfamily' // 字体
        , 'fontsize' // 字号
        , 'paragraph' // 段落格式
        , 'justifyleft' // 居左对齐
        , 'justifyright' // 居右对齐
        , 'justifycenter' // 居中对齐
        , 'justifyjustify' // 两端对齐
        // 'lineheight', // 行间距
        // 'rowspacingtop', // 段前距
        // 'rowspacingbottom', // 段后距
        // 'anchor', // 锚点
        , 'forecolor' // 字体颜色
        , 'fontborder' // 字符边框
        , 'backcolor' // 背景色
        , 'bold' // 加粗
        // 'snapscreen', // 截图
        , 'italic' // 斜体
        , 'underline' // 下划线
        , 'strikethrough' // 删除线
        // 'indent', // 首行缩进
        // 'blockquote', // 引用
        , 'pasteplain' // 纯文本粘贴模式
        // 'selectall', // 全选

        , 'horizontal' // 分隔线
        // 'time', // 时间
        // 'date', // 日期
        , 'link' // 超链接
        , 'unlink' // 取消链接
        // 'insertrow', // 前插入行
        // 'insertcol', // 前插入列
        // 'mergeright', // 右合并单元格
        // 'mergedown', // 下合并单元格
        // 'deleterow', // 删除行
        // 'deletecol', // 删除列
        // 'splittorows', // 拆分成行
        // 'splittocols', // 拆分成列
        // 'splittocells', // 完全拆分单元格
        // 'deletecaption', // 删除表格标题
        // 'inserttitle', // 插入标题
        // 'mergecells', // 合并多个单元格
        // 'deletetable', // 删除表格
        // 'insertparagraphbeforetable', // "表格前插入行"
        , 'simpleupload' // 单图上传
        , 'insertimage' // 多图上传
        // 'edittable', // 表格属性
        // 'edittd', // 单元格属性
        , 'emotion' // 表情
        // 'spechars', // 特殊字符
        , 'searchreplace' // 查询替换
        , 'insertvideo' // 视频
        // 'insertorderedlist', // 有序列表
        // 'insertunorderedlist', // 无序列表
        , 'fullscreen' // 全屏
        // 'insertframe', // 插入Iframe
        // 'imagenone', // 默认
        // 'imageleft', // 左浮动
        // 'imageright', // 右浮动
        , 'attachment' // 附件
        // 'imagecenter', // 居中
        , 'edittip ' // 编辑提示
        , 'autotypeset' // 自动排版
        // 'touppercase', // 字母大写
        // 'tolowercase', // 字母小写
        , 'background' // 背景
        , 'template' // 模板
        , 'inserttable' // 插入表格
        , 'drafts' //  从草稿箱加载
        , 'cleardoc' // 清空文档
        , 'preview' // 预览
        , 'help' // 帮助
      ]
    ]
  }
}
